class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {



        //思路：不能申请多余的空间，那么我们遍历就可以，遇到0就进行处理，这会遇到的问题是可能数据太多，先不管
        //需要把原来是0的记录给区分开
        //换一种思路，把需要的行列记录下来就可以 ，因为不需要重复的，所以用set容器

        set<int> row_trans;
        set<int> col_trans;
        //vector<vector<int>> flag = {0};//访问过就不必再访问
        for (int i = 0;i < matrix.size();i++)
        {
            for(int j = 0;j<matrix[i].size();j++)
            {

                if (matrix[i][j] == 0)
                {
                    //修改前后左右的数据
                    row_trans.insert(i);
                    col_trans.insert(j);

                }

            }
        }

       // printf("row_trans.size():%d,col_trans.size():%d",row_trans.size(),col_trans.size());
        //现在开始修改数据
        for(set<int>::iterator it=row_trans.begin();it!=row_trans.end();it++)
        //for(int t1 = 0;t1 < row_trans.size();t1++)
        {
            //修改
           for(int j = 0;j<matrix[*it].size();j++)
           {
                matrix[*it][j] = 0;
           }

        }
        //修改列
        //for(int t1 = 0;t1 < col_trans.size();t1++)
        for(set<int>::iterator it=col_trans.begin();it!=col_trans.end();it++)
        {
            //修改
           for(int j = 0;j<matrix.size();j++)
           {
                matrix[j][*it] = 0;
           }

        }


    }
};